package org.example.study2;

public class ThreadPropertiesDemo {
    public static void main(String[] args) throws InterruptedException {
        // 1. 创建线程（自定义名称）
        Thread worker = new Thread(() -> {
            System.out.println("【工作线程】开始执行任务...");
            try {
                Thread.sleep(500); // 模拟耗时操作
            } catch (InterruptedException e) {
                System.out.println("【工作线程】被中断！");
            }
            System.out.println("【工作线程】任务完成！");
        }, "Worker-Thread");  // 自定义线程名称

        // 2. 打印初始属性（线程未启动）
        printThreadInfo("创建后", worker);

        // 3. 启动线程
        worker.start();
        printThreadInfo("启动后", worker);

        // 4. 主线程等待工作线程结束（替代空循环）
        worker.join();

        // 5. 打印终止状态
        printThreadInfo("结束后", worker);
    }

    // 封装属性打印逻辑
    private static void printThreadInfo(String phase, Thread thread) {
        System.out.println("\n===== " + phase + " [" + thread.getName() + "] =====");
        System.out.println("ID: " + thread.getId());
        System.out.println("状态: " + thread.getState());
        System.out.println("优先级: " + thread.getPriority());
        System.out.println("是否后台线程: " + thread.isDaemon());
        System.out.println("是否存活: " + thread.isAlive());
        System.out.println("是否被中断: " + thread.isInterrupted());
    }
}
/*

===== 创建后 [Worker-Thread] =====
        ID: 24
        状态: NEW
        优先级: 5
        是否后台线程: false
        是否存活: false
        是否被中断: false

        ===== 启动后 [Worker-Thread] =====
        ID: 24
        状态: RUNNABLE
        优先级: 5
        是否后台线程: false
        是否存活: true
        是否被中断: false
        【工作线程】开始执行任务...
        【工作线程】任务完成！

        ===== 结束后 [Worker-Thread] =====
        ID: 24
        状态: TERMINATED
        优先级: 5
        是否后台线程: false
        是否存活: false
        是否被中断: false

*/
